package com.office.automate.dataaccess.def.leave;

import java.util.List;
import java.util.Map;

import com.office.automate.exception.framework.FrontierVisibleException;
import com.office.automate.model.leave.EmployeeLeave;
import com.office.automate.model.leave.LeaveRequest;
import com.office.automate.model.leave.LieuLeaveRequest;
import com.office.automate.model.report.EmployeeLeaveDetailsRequest;

public interface EmployeeLeaveDao {

	public List<EmployeeLeave> getCurrentEntitlementBalance(long anEmployeeId) throws FrontierVisibleException;

	public EmployeeLeave getCurrentEntitlementBalance(int aFnYear, long anEmployeeId) throws FrontierVisibleException;

	public Map<String, Object> addLeaveRequest(LeaveRequest leaveRequest) throws FrontierVisibleException;

	public List<LeaveRequest> getEmployeeLeaveRequestsList(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeLeaveRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	public Map<String, Object> cancelLeaveRequest(LeaveRequest aLeaveRequest) throws FrontierVisibleException;

	public LeaveRequest getLeaveRequestDetails(long aLeaveRequestId) throws FrontierVisibleException;

	public int getAvailableEmployeeLeaveApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;

	public List<LeaveRequest> getEmployeeLeaveApprovalRequestsList(long aCurrentLoginUserId, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public Map<String, Object> approveLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public Map<String, Object> rejectLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public List<LeaveRequest> getEmployeeLeaveDetails(EmployeeLeaveDetailsRequest anEmployeeLeaveDetailsRequest) throws FrontierVisibleException;

	public Map<String, Object> addLieuLeaveRequest(LieuLeaveRequest lieuLeaveRequest) throws FrontierVisibleException;

	public Map<String, Object> approveLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public Map<String, Object> rejectLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public Map<String, Object> cancelLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public LieuLeaveRequest getLieuLeaveRequestDetails(long aLieuLeaveRequestId) throws FrontierVisibleException;

	public List<LieuLeaveRequest> getEmployeeLieuLeaveRequestsList(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeLieuLeaveRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	public List<LieuLeaveRequest> getEmployeeLieuLeaveApprovalRequestsList(long aCurrentLoginUserId, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeLieuLeaveApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;

	public List<LeaveRequest> getEmployeeLeaveSummaryDetails(EmployeeLeaveDetailsRequest anEmployeeLeaveDetailsRequest) throws FrontierVisibleException;
}
